package com.letoo.dragon.core.service;

import java.io.File;
import java.util.List;

/**
 * 激光推送服务接口
 *
 * @author: dengjie
 */
public interface AliyunOssService {

    /**
     * 简单上传文件
     * 
     * @param bucketName
     *            OSS bucketName
     * @param fileName
     *            文件名。也是API中的key
     * @param file
     *            文件对象
     * @param fileType
     *            文件类型。
     * @return
     */
    public boolean uploadFile(String bucketName, String fileName, File file);

    /**
     * 简单上传文件进行文件内容的更新。更新文件:只更新内容，不更新文件名和文件地址。 (因为地址没变，可能存在浏览器原数据缓存，不能及时加载新数据，例如图片更新，请注意)
     * 
     * @param bucketName
     *            OSS bucketName
     * @param fileName
     *            文件名。也是API中的key
     * @param file
     *            文件对象
     * @param fileType
     *            文件类型。
     * @return 是否更新内容成功
     */
    public boolean updateFile(String bucketName, String fileName, File file);

    /**
     * 替换文件:删除原文件并上传新文件，文件名和地址同时替换 解决原数据缓存问题，只要更新了地址，就能重新加载数据)
     * 
     * @param bucketName
     *            OSS bucketName
     * @param oldFileName
     *            旧文件名。也是API中的key
     * @param newFileName
     *            新文件名。也是API中的key
     * @param file
     *            文件对象
     * @param fileType
     *            文件类型。
     * @return 是否更新内容成功
     */
    public boolean replaceFile(String bucketName, String oldFileName, String newFileName, File file);

    /**
     * 单文件删除
     * 
     * @param bucketName
     *            OSS bucketName
     * @param fileName
     *            文件名。也是API中的key
     * @return boolean 是否删除成功
     */
    public boolean deleteFile(String bucketName, String fileName);

    /**
     * 批量文件删除(较快)：适用于相同endPoint和BucketName
     * 
     * @param bucketName
     *            OSS bucketName
     * @param fileNames
     *            文件名集合。也是API中的key集合
     * @return int 成功删除的个数
     */
    public int batchDeleteFile(String bucketName, List<String> fileNames);

}
